﻿using Echart.Model.Data;
using Echart.Model.TextStyle;
using Echart.Model.ToolTip;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Echart.Model.TimeLine
{
    public class timeline
    {
        /// <summary>
        /// 是否显示 timeline 组件。如果设置为false，不会显示，但是功能还存在。
        /// </summary>
        public bool? show { get; set; }

        /// <summary>
        ///所有图形的 zlevel 值。
        /// </summary>
        public double? zlevel { get; set; }

        /// <summary>
        ///所有图形的 z 值。
        /// </summary>
        public double? z { get; set; }

        /// <summary>
        ///single组件离容器左侧的距离。
        /// </summary>
        public string left { get; set; }

        /// <summary>
        ///single组件离容器右侧的距离。
        /// </summary>
        public string right { get; set; }

        /// <summary>
        ///single组件离容器上侧的距离。
        /// </summary>
        public string top { get; set; }

        /// <summary>
        ///single组件离容器下侧的距离。
        /// </summary>
        public string bottom { get; set; }

        /// <summary>
        ///single组件的宽度
        /// </summary>
        public string width { get; set; }

        /// <summary>
        ///single组件的高度
        /// </summary>
        public string height { get; set; }

        /// <summary>
        /// 轴的朝向，默认水平朝向，可以设置成 'vertical' 垂直朝向。
        /// </summary>
        public string orient { get; set; }

        /// <summary>
        /// 坐标轴类型。可选：
        /// 'value' 数值轴，适用于连续数据。
        /// 'category' 类目轴，适用于离散的类目数据。为该类型时类目数据可自动从 series.data 或 dataset.source 中取，或者可通过 xAxis.data 设置类目数据。
        /// 'time' 时间轴，适用于连续的时序数据，与数值轴相比时间轴带有时间的格式化，在刻度计算上也有所不同，例如会根据跨度的范围来决定使用月，星期，日还是小时范围的刻度。
        /// 'log' 对数轴。适用于对数数据。
        /// </summary>
        public string type { get; set; }

        /// <summary>
        /// 坐标轴名称。
        /// </summary>
        public string name { get; set; }

        /// <summary>
        /// 坐标轴名称显示位置。可选：
        /// 'start' 'middle' 或者 'center' 'end'
        /// </summary>
        public string nameLocation { get; set; }

        /// <summary>
        /// 坐标轴名称的文字样式。
        /// </summary>
        public textStyle nameTextStyle { get; set; }

        /// <summary>
        /// 坐标轴名称与轴线之间的距离。
        /// </summary>
        public double? nameGap { get; set; }

        /// <summary>
        /// 坐标轴名字旋转，角度值。
        /// </summary>
        public double? nameRotate { get; set; }

        /// <summary>
        /// 是否是反向坐标轴。
        /// </summary>
        public bool? inverse { get; set; }

        /// <summary>
        /// 坐标轴两边留白策略
        /// </summary>
        public Array[] boundaryGap { get; set; }

        /// <summary>
        /// 坐标轴刻度最小值。
        /// </summary>
        public double? min { get; set; }

        /// <summary>
        /// 坐标轴刻度最大值。
        /// </summary>
        public double? max { get; set; }

        /// <summary>
        /// 是否是脱离 0 值比例,只在数值轴中（type: 'value'）有效。在设置 min 和 max 之后该配置项无效。
        /// </summary>
        public bool? scale { get; set; }

        /// <summary>
        /// 坐标轴的分割段数，需要注意的是这个分割段数只是个预估值，最后实际显示的段数会在这个基础上根据分割后坐标轴刻度显示的易读程度作调整。在类目轴中无效。
        /// </summary>
        public int? splitNumber { get; set; }

        /// <summary>
        /// 自动计算的坐标轴最小间隔大小。
        /// </summary>
        public double? minInterval { get; set; }

        /// <summary>
        /// 自动计算的坐标轴最大间隔大小。
        /// </summary>
        public double? maxInterval { get; set; }

        /// <summary>
        /// 强制设置坐标轴分割间隔。
        /// </summary>
        public double? interval { get; set; }

        /// <summary>
        /// 对数轴的底数，只在对数轴中（type: 'log'）有效
        /// </summary>
        public double? logbase { get; set; }

        /// <summary>
        /// 坐标轴是否是静态无法交互。
        /// </summary>
        public bool? silent { get; set; }

        /// <summary>
        /// 坐标轴的标签是否响应和触发鼠标事件，默认不响应。
        /// </summary>
        public bool? triggerEvent { get; set; }

        /// <summary>
        /// 坐标轴轴线相关设置。
        /// </summary>
        public object axisLine { get; set; }

        /// <summary>
        /// 坐标轴刻度相关设置。
        /// </summary>
        public object axisTick { get; set; }

        /// <summary>
        /// 坐标轴次刻度线相关设置。
        /// </summary>
        public object minorTick { get; set; }

        /// <summary>
        /// 坐标轴刻度标签的相关设置。
        /// </summary>
        public object axisLabel { get; set; }

        /// <summary>
        /// 坐标轴在 grid 区域中的分隔线。
        /// </summary>
        public object splitLine { get; set; }

        /// <summary>
        /// 坐标轴在 grid 区域中的次分隔线
        /// </summary>
        public object minorSplitLine { get; set; }

        /// <summary>
        /// 坐标轴在 grid 区域中的分隔区域
        /// </summary>
        public object splitArea { get; set; }

        /// <summary>
        /// 类目数据
        /// </summary>
        public data[] data { get; set; }

        /// <summary>
        /// 坐标轴指示器配置项。
        /// </summary>
        public object axisPointer { get; set; }

        /// <summary>
        /// 类目数据
        /// </summary>
        public tooltip tooltip { get; set; }
    }
}
